/**
 * 
 */
package com.desksoft.ecommerce.util.freemarker;

import java.util.List;
import java.util.Properties;
import java.util.Set;

import org.springframework.ui.ModelMap;

import com.desksoft.ecommerce.vo.KeyAndValue;
import com.desksoft.utility.resource.ResourceUtil;
import com.google.common.collect.Lists;

import freemarker.ext.beans.BeansWrapper;
import freemarker.template.TemplateModelException;

/***************************************
 * <pre>
 * 版权所有：杭州迪科软件 保留所有权利
 * 创建日期: Jul 29, 2011 3:01:32 PM
 * 创建作者：yejw
 * 文件名称：FreemarkerStatic.java
 * 版本：
 * 功能：
 * 最后修改时间：Jul 29, 2011 3:01:32 PM
 * 修改记录：
 * </pre>
 *****************************************/

public class FreemarkerStaticUtil {

	private FreemarkerStaticUtil() {};
	
	private static List<KeyAndValue<String, String>> defaultStaticClasses = null;  
	
	static {
		defaultStaticClasses = Lists.newArrayList();
		Properties statics = ResourceUtil.getResourceAsProperties("freemarkerstatic.properties");
		
		if(statics != null) {
			Set<Object> set = statics.keySet();
			
			for (Object o : set) {
				if(o == null) {
					continue;
				}
				
				defaultStaticClasses.add(new KeyAndValue<String, String>((String) o, (String) statics.get(o)));
			}
		}
	}
	
	/**
	 * 将class的引用注入给freemarker，作用域为request
	 * 
	 * @param modelMap
	 */
	public static void setDefaultStaticModel(ModelMap modelMap) {
		for (KeyAndValue<String, String> kv : defaultStaticClasses) {
			if (!modelMap.containsKey(kv.getKey())) {
				modelMap.put(kv.getKey(), getStaticModel(kv.getValue()));
			}
		}
	}

	/**
	 * 获取freemarker可使用的bean
	 * 
	 * @param clzzzName
	 * @return
	 */
	private static Object getStaticModel(String clzzzName) {
		BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
		
		try {
			return wrapper.getStaticModels().get(clzzzName);
		} catch (TemplateModelException e) {
			e.printStackTrace();
		}
		
		return null;
	}

}
